﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Resources;
using System.Web;
using vudu.Logica.Clases;

namespace vudu.EnlaceDatos.SqlServer
{
    public class SqlServerNota
    {


         /// <summary>
           /// Funcion que devuelve un arreglo indicando las
          /// materias de un profesor en un determinado semestre
        /// </summary>
        public  List< String []> MateriasProfesor(int idProfesor,int idPeriodo)
        {

            Conexion miConexion = new Conexion();
            SqlCommand command = new SqlCommand();
            SqlDataReader reader = null;
            List<String[]> materias = new List<String[]>();
            try
            {
                //se abre una conexion a base de datos
                miConexion.AbrirConexionBd();
                // se completa el objeto comando, con la informacion de la conexion , variables, y nombre del stored procedure.
                command.Connection = miConexion.ObjetoConexion();
                command.CommandType = System.Data.CommandType.StoredProcedure;
                command.CommandText = "[dbo].[MateriasProfesor]";
                command.CommandTimeout = 10;
                //variables del stored procedure de sql server.
                command.Parameters.AddWithValue("@id_Cedula", idProfesor);
                command.Parameters["@id_Cedula"].Direction = ParameterDirection.Input;
                command.Parameters.AddWithValue("@id_Periodo", idPeriodo);
                command.Parameters["@id_Periodo"].Direction = ParameterDirection.Input;
                //se ejecuta el comando
                reader = command.ExecuteReader();

                
                while (reader.Read())
                {

                    String[] datos = new String[4];
                    //Guardo el nombre de la escuela
                    datos[0] = reader.GetString(0);
                    //Guardo el nombre de la materia
                    datos[1] = reader.GetString(1);
                    //Guardo el numero de la seccion
                    datos[2] = reader.GetInt32(2).ToString();
                    //Guardo el id de la seccion_materia
                    datos[3] = reader.GetInt32(3).ToString();
                    materias.Add(datos);
                 
                }
               
                return materias;
            }
            catch (SqlException)
            {
                return null;
            }
            catch (Exception)
            {
                return null;
            }
            //se cierra la conexion independientemente de que se haya detectado o no una excepcion.
            finally
            {
                if (reader != null)
                    reader.Close();
                miConexion.CerrarConexionBd();
            }


            
        }








        /// <summary>
        /// Funcion que devuelve un arreglo indicando los
        /// alumnos de una seccion en particular
        /// </summary>
        public List<String[]> EstudiantesSeccion(int idSeccion)
        {

            Conexion miConexion = new Conexion();
            SqlCommand command = new SqlCommand();
            SqlDataReader reader = null;
            List<String[]> estudiantes = new List<String[]>();
            try
            {
                //se abre una conexion a base de datos
                miConexion.AbrirConexionBd();
                // se completa el objeto comando, con la informacion de la conexion , variables, y nombre del stored procedure.
                command.Connection = miConexion.ObjetoConexion();
                command.CommandType = System.Data.CommandType.StoredProcedure;
                command.CommandText = "[dbo].[EstudiantesSeccion]";
                command.CommandTimeout = 10;
                //variables del stored procedure de sql server.
                command.Parameters.AddWithValue("@id_SeccionMateria", idSeccion);
                command.Parameters["@id_SeccionMateria"].Direction = ParameterDirection.Input;
                //se ejecuta el comando
                reader = command.ExecuteReader();


                while (reader.Read())
                {

                    String[] datos = new String[3];
                    //Guardo la cedula del estudiante
                    datos[0] = reader.GetInt32(0).ToString();
                    //Guardo el nombre del estudiante
                   datos[1] = reader.GetString(1) + " " + reader.GetString(2);
                   datos[2] = reader.GetInt32(3).ToString();
                   estudiantes.Add(datos);

                }

                return estudiantes;
            }
            catch (SqlException)
            {
                return null;
            }
            catch (Exception)
            {
                return null;
            }
            //se cierra la conexion independientemente de que se haya detectado o no una excepcion.
            finally
            {
                if (reader != null)
                    reader.Close();
                miConexion.CerrarConexionBd();
            }



        }




        /// <summary>
        /// Funcion que devuelve un arreglo indicando el
        /// esquema de evaluacion de  una seccion en particular
        /// </summary>
        public List<String[]> EsquemaEvaluacionSeccion(int idSeccion)
        {

            Conexion miConexion = new Conexion();
            SqlCommand command = new SqlCommand();
            SqlDataReader reader = null;
            List<String[]> evaluaciones = new List<String[]>();
            try
            {
                //se abre una conexion a base de datos
                miConexion.AbrirConexionBd();
                // se completa el objeto comando, con la informacion de la conexion , variables, y nombre del stored procedure.
                command.Connection = miConexion.ObjetoConexion();
                command.CommandType = System.Data.CommandType.StoredProcedure;
                command.CommandText = "[dbo].[EsquemaEvaluacionSeccion]";
                command.CommandTimeout = 10;
                //variables del stored procedure de sql server.
                command.Parameters.AddWithValue("@id_SeccionMateria", idSeccion);
                command.Parameters["@id_SeccionMateria"].Direction = ParameterDirection.Input;
                //se ejecuta el comando
                reader = command.ExecuteReader();

          
                while (reader.Read())
                {

                    String[] datos = new String[2];
                    datos[0] = reader.GetString(0) + " " + reader.GetInt32(1).ToString() + "%";
                    datos[1] = reader.GetInt32(2).ToString();
                    evaluaciones.Add(datos);

                }

                return evaluaciones;
            }
            catch (SqlException)
            {
                return null;
            }
            catch (Exception)
            {
                return null;
            }
            //se cierra la conexion independientemente de que se haya detectado o no una excepcion.
            finally
            {
                if (reader != null)
                    reader.Close();
                miConexion.CerrarConexionBd();
            }



        }



        /// <summary>
        /// Funcion que devuelve la nota de un
        /// alumno en  una evaluacion en particular
        /// </summary>
        public int NotaEvaluacion(int idEvaluacion, int idEstudiante)
        {

            Conexion miConexion = new Conexion();
            SqlCommand command = new SqlCommand();
            SqlDataReader reader = null;
            int nota = 0;
            try
            {
                //se abre una conexion a base de datos
                miConexion.AbrirConexionBd();
                // se completa el objeto comando, con la informacion de la conexion , variables, y nombre del stored procedure.
                command.Connection = miConexion.ObjetoConexion();
                command.CommandType = System.Data.CommandType.StoredProcedure;
                command.CommandText = "[dbo].[NotaAlumno]";
                command.CommandTimeout = 10;
                //variables del stored procedure de sql server.

                command.Parameters.AddWithValue("@id_Evaluacion", idEvaluacion);
                command.Parameters["@id_Evaluacion"].Direction = ParameterDirection.Input;
                command.Parameters.AddWithValue("@id_Estudiante", idEstudiante);
                command.Parameters["@id_Estudiante"].Direction = ParameterDirection.Input;
                //se ejecuta el comando
                reader = command.ExecuteReader();


               while (reader.Read())
                {

                    //Guardo la nota
                   // nota = reader.GetInt32(0);
                    nota = reader.GetInt32(0);

                }
                
                return nota;
            }
            catch (SqlException)
            {
                return -1;
            }
            catch (Exception)
            {
                return -2;
            }
            //se cierra la conexion independientemente de que se haya detectado o no una excepcion.
            finally
            {
                if (reader != null)
                    reader.Close();
                miConexion.CerrarConexionBd();
            }



        }



    }
}